package main

import (
	"fmt"
	"io"
	"log"
	"net"
	"strconv"
)

// servicePort 为实际提供服务的端口
func handleClient(client net.Conn, servicePort string) {
	defer client.Close()

	// 连接到目标服务器
	server, err := net.Dial("tcp", "192.168.146.1:"+servicePort)
	if err != nil {
		log.Println("连接目标服务器失败:", err)
		return
	}
	defer server.Close()

	// 转发流量
	done := make(chan struct{})
	go io.Copy(server, client) // 将客户端的数据转发给服务器
	go io.Copy(client, server) // 将服务器的数据转发给客户端

	<-done // 等待数据传输完成
}

// port为网关端口portAfter为网关对外提供服务的端口,
func proxy(ip, port string) {
	portBefore, _ := strconv.Atoi(port)
	portAfter := strconv.Itoa(portBefore + 1000)
	fmt.Println("portAfter", portAfter)
	listener, err := net.Listen("tcp", ip+":"+portAfter)
	if err != nil {
		log.Fatal("监听端口失败:", err)
	}
	defer listener.Close()

	//log.Println("服务正在监听...")
	for {
		client, err := listener.Accept()
		if err != nil {
			log.Println("接受客户端连接失败:", err)
			continue
		}

		go handleClient(client, "11000") // 处理客户端连接
	}
}
